Skip to content

kit: Add optional gpui-fast backend - #3375

Merged
huacnlee merged 6 commits into
mainfrom
add-gpui-fast-feature
Oct 6, 2026
Merged

huacnlee merged 6 commits into
mainfrom
add-gpui-fast-feature

Conversation

@huacnlee

@huacnlee huacnlee commented Oct 6, 2026 •

Copy link
Copy Markdown
Member

Add an optional gpui-fast feature across GPUI Kit’s existing crates:

gpui-kit = { version = "0.7", features = ["gpui-fast"] }

No new crates. Preserve the existing gpui-pre-* workspace dependencies and default backend; optional Fast dependencies and internal conditional aliases select the engine. Existing application imports and macros continue to work. This is additive, with no breaking changes. Upstream packages still compile because Cargo features are additive.

Public API

  • gpui-kit: gpui-fast selects Fast for core, platforms, and enabled layers.
  • gpui-base, gpui-component, gpui-kit-assets, gpui-fps, gpui-wry, gpui-shell, gpui-component-shell: gpui-fast selects the matching backend for standalone consumers.
  • gpui-component-macros: #[derive(IntoPlot)] additionally recognizes direct Fast dependencies.
  • Gallery and examples expose the same feature for comparisons.

Validation

27 focused UI/macro/assets tests and 9 documentation tests pass. Default/Fast configurations, examples, WebView, Shell, benchmarks, and nightly WebAssembly compile. Clippy, formatting, dependency, and snapshot-pin checks pass. CI adds native and WebAssembly coverage.

AI-assisted with Codex.

@huacnlee
huacnlee enabled auto-merge (squash) October 6, 2026 07:32
@huacnlee
huacnlee merged commit 7eb5209 into main Oct 6, 2026
15 of 16 checks passed
@huacnlee
huacnlee deleted the add-gpui-fast-feature branch October 6, 2026 07:41
huacnlee added a commit to huacnlee/gpui-omarchy that referenced this pull request Oct 6, 2026
## Summary
Enable GPUI Fast by default through `gpui-fast =
["gpui-kit/gpui-fast"]`. Update the native and web gallery dependencies
and simulate frame callbacks in three existing animation tests.

## Public API
`gpui-fast` Cargo feature: forwards backend selection to GPUI Kit;
enabled by default. Rust signatures are unchanged.

## Breaking Changes
The default backend changes from GPUI Pre to GPUI Fast.

## Dependencies
Uses GPUI Kit `main` after [PR
#3375](longbridge/gpui-kit#3375) merged. Do not
publish until the feature is released and the Git dependency is replaced
with the released version.

## Test plan
- [x] Default backend: 90 library tests and 25 gallery tests pass.
- [x] Without defaults: 90 library tests and all-target compilation
pass.
- [x] WASM gallery compiles on nightly.
- [x] Formatting and Clippy complete; Clippy reports three existing
warnings in surface/theme code.

AI-assisted with Codex.
feigeCode added a commit to feigeCode/gpui-kit that referenced this pull request Oct 7, 2026
Sync longbridge/gpui-kit upstream through 29c0457, including:
- kit: optional gpui-fast backend (longbridge#3375)
- webview: compose native views with the GPUI Fast backend (longbridge#3389)
- kit: one Windows manifest with GPUI Fast (longbridge#3380)
- input/diff/tooltip/test updates

Local fork kept: caret gpui-pre pins (navop resolves them via [patch] to
fork tags), IconColorMode color/mono extension, CE-generic ports.
huacnlee added a commit that referenced this pull request Oct 7, 2026
## Description

On macOS with the default gpui-pre backend, the native `WKWebView` sits
above GPUI's Metal layer, so `PopupMenu`, dialogs and tooltips that
overlap the page are hidden behind it. Only GPUI Fast's window
composition places deferred overlays above the native view:

```text
front  GPUI overlay    deferred draws (PopupMenu, Dialog, Tooltip …)
       native surface  WKWebView / X11 child window
back   GPUI base       the root view
```

`gpui-webview` now always runs on GPUI Fast:

- It depends on `gpui-kit` with `default-features = false, features =
["gpui-fast"]` instead of on GPUI directly. Feature unification turns on
`gpui-fast` for the application's own `gpui-kit`, so **applications need
no manifest change**.
- The gpui-pre code paths and `#[cfg(feature = "gpui-fast")]` branches
are removed; composition is always used on macOS and Linux.
- The crate's `gpui-fast` feature is kept as a no-op so manifests that
enable it still resolve.
- `examples/webview` drops its `gpui-fast` feature; `cargo run -p
webview` shows the menu above the page.
- Because `gpui-webview` turns on `gpui-kit/gpui-fast` for every member
built with it, CI's workspace lint and test, and the `bump-gpui.ts` kit
check, exclude `gpui-webview` and `webview`; CI lints them in a separate
step and tests `gpui-webview` in the GPUI Fast job. The rest of the
workspace keeps checking gpui-pre.
- README and WebView docs (en / zh-CN) updated.

`cargo publish -p gpui-webview --dry-run` fails today because the
published `gpui-kit` 0.7.1 has no `gpui-fast` feature; it resolves once
the next `gpui-kit` release (which includes #3375) is published together
with this crate.

Verified on macOS: the example's "…" dropdown menu renders above the
WebView on GPUI Fast.

## Breaking Changes

No manifest change is needed, but an application that depends on
`gpui-webview` now runs entirely on GPUI Fast instead of gpui-pre.

## Public API

### `gpui-webview`

- `gpui-fast` feature — now has no effect; GPUI Fast is always used.
Kept for manifest compatibility.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
linruohan pushed a commit to linruohan/gpui-component that referenced this pull request Oct 9, 2026
## Description

On macOS with the default gpui-pre backend, the native `WKWebView` sits
above GPUI's Metal layer, so `PopupMenu`, dialogs and tooltips that
overlap the page are hidden behind it. Only GPUI Fast's window
composition places deferred overlays above the native view:

```text
front  GPUI overlay    deferred draws (PopupMenu, Dialog, Tooltip …)
       native surface  WKWebView / X11 child window
back   GPUI base       the root view
```

`gpui-webview` now always runs on GPUI Fast:

- It depends on `gpui-kit` with `default-features = false, features =
["gpui-fast"]` instead of on GPUI directly. Feature unification turns on
`gpui-fast` for the application's own `gpui-kit`, so **applications need
no manifest change**.
- The gpui-pre code paths and `#[cfg(feature = "gpui-fast")]` branches
are removed; composition is always used on macOS and Linux.
- The crate's `gpui-fast` feature is kept as a no-op so manifests that
enable it still resolve.
- `examples/webview` drops its `gpui-fast` feature; `cargo run -p
webview` shows the menu above the page.
- Because `gpui-webview` turns on `gpui-kit/gpui-fast` for every member
built with it, CI's workspace lint and test, and the `bump-gpui.ts` kit
check, exclude `gpui-webview` and `webview`; CI lints them in a separate
step and tests `gpui-webview` in the GPUI Fast job. The rest of the
workspace keeps checking gpui-pre.
- README and WebView docs (en / zh-CN) updated.

`cargo publish -p gpui-webview --dry-run` fails today because the
published `gpui-kit` 0.7.1 has no `gpui-fast` feature; it resolves once
the next `gpui-kit` release (which includes longbridge#3375) is published together
with this crate.

Verified on macOS: the example's "…" dropdown menu renders above the
WebView on GPUI Fast.

## Breaking Changes

No manifest change is needed, but an application that depends on
`gpui-webview` now runs entirely on GPUI Fast instead of gpui-pre.

## Public API

### `gpui-webview`

- `gpui-fast` feature — now has no effect; GPUI Fast is always used.
Kept for manifest compatibility.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@huacnlee huacnlee mentioned this pull request Oct 12, 2026
huacnlee added a commit that referenced this pull request Oct 12, 2026
## Description

Prepare v0.7.2 on `stable` from the PRs merged into `main` since v0.7.1,
leaving out every change that breaks existing consumers. `stable`
already carries #3371 and #3373; this adds the remaining compatible PRs
with `git cherry-pick -x` and bumps the workspace to 0.7.2.

### Included

- kit: Add optional gpui-fast backend (#3375)
- tooltip: Make show delay and grace period configurable with
`TooltipDefaults` (#3376)
- docs: Explain recovering focus when the focused element stops
rendering (#3386)
- diff: Add readonly patch viewer (#3378)
- kit: Use one Windows manifest with GPUI Fast (#3380)
- test: Make Progress and TitleBar findable in UI tests (#3383)
- input: Preserve selection, focus ring and context menu actions (#3382)
- diff: Add a Git history example and complete review APIs (#3388)
- text_view: Ignore gestures that stay inside one block plugin (#3390)
- text_view: Round the first and last table rows to the frame radius
(#3309)
- menu: Open a context menu with a long press on touch (#3393)
- text_view: Keep narrow table columns on one line (#3399)
- settings: Keep focus rings inside the list viewport (#3394)
- scrollable_mask: Keep rounded scroll-table corners clean at any scroll
offset (#3400)
- dialog: Add margin_top to AlertDialog (#3404)
- input: Add InputState::add_selection for programmatic multi-cursor
(#3403)
- text_selection: Stop writing selection state on every frame (#3407)
- table: Make the sort icon a labelled button (#3396)
- table: Report visible row ranges of one row or none (#3397)
- dialog: Support configurable entrance animations (#3405)
- docs: Explain the open_dialog builder and footer contracts (#3406)
- dock: Hand the focus to the tab that replaces a closed one (#3409)
- dropdown_button: Add A11y names for the menu trigger (#3410)
- text, resizable: Stop notifying state that did not change (#3418)
- editor: Add on-demand completion commands (#3411)
- table: Clear a right-clicked cell's outline on the next click (#3413)
- tab: Scroll a clicked tab into view with the next one peeking (#3419)
- table: Allow a header row height separate from the body (#3420)
- menu: Focus a context menu before its first frame (#3422)
- text: Preserve logical selection across presentation changes (#3421)
- text: Keep inline HTML mark highlights in Markdown (#3425)
- input: Anchor completion/code-action popups to the current frame's
caret (#3412)
- input: Run custom context menu builders after releasing the input
(#3433)
- input: Keep auto-grow rows fitted when the limits change (#3430)
- text: Paint TextView selection under the glyphs (#3439)

Already on `stable`: #3371, #3373.

### Excluded (Breaking Changes)

- #3432 motion: `Easing::sample` now returns values outside `[0, 1]` for
overshooting curves.
- #3415 tab: new `TabVariant::Folder` breaks exhaustive matches.
- #3402 kit: pointer helpers now keep held modifiers; nested
context-menu behavior changes in tests.
- #3384 test: `TestWindowExt` gains required methods.
- #3302 resizable: `ResizeHandle::on_drag` takes `&T` instead of
`Rc<T>`.
- #3389, #3395, #3398 webview: wrapper API changes, `gpui-wry` →
`gpui-webview` rename, and the GPUI Fast requirement.

#3411, #3405 and #3396 have a Breaking Changes section that reads "None"
and are included. #3376 only deprecates `TooltipRequest::placement`, and
#3397 / #3382 change behavior compatibly, so they are included too.

### Adaptations

- `crates/kit/tests/collections.rs` and `crates/kit/tests/rendering.rs`:
conflict resolutions drop the tests that belong to #3402 and keep each
backported PR's own test.
- `test: Keep backported tests on the v0.7.1 test API`: the menu and
completion tests from #3422 and #3412 used `find_all` and
`pointer_down`/`pointer_up` from #3384/#3402. They now query
`gpui_kit::base::test_support::snapshots` and dispatch mouse events
directly.
- `kit: Prepare v0.7.2`: workspace version bump; `Cargo.lock` only
updates workspace members.

## Public API

No new public API beyond what the included PRs add; each lists its items
in its own `## Public API` section (notably #3375, #3376, #3378, #3388,
#3403, #3404, #3405, #3411, #3420).

## How to Test

- `cargo clippy --workspace --all-targets -- --deny warnings` passes on
Linux.
- `cargo test -p gpui-kit --features "test-support component assets"
--test collections --test menu --test input` passes on Linux.
- The macOS-only `rendering` test (#3439 adds one case, the count is
updated to 11) was not run.

AI-assisted: the backport, conflict resolution and test adaptations were
done with Claude Code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Floyd Wang <codelife721@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Gustave <gustavel@gmail.com>
Co-authored-by: luren <84951845+lurenjia534@users.noreply.github.com>
Co-authored-by: Ylin <ylinwind@gmail.com>
Co-authored-by: ihavecoke <mixboip@gmail.com>
Co-authored-by: Lorenzo <150276837+Bombatomica64@users.noreply.github.com>
Co-authored-by: MR. XIE <113512030+xxww0098@users.noreply.github.com>
Co-authored-by: xxww0098 <shefkie1957@gmail.com>
Co-authored-by: Sola 🌙🤖 <266175376+sola-ryu@users.noreply.github.com>
Co-authored-by: Sola <sola-ryu@users.noreply.github.com>
Co-authored-by: Andy Hsu <i@nn.ci>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Floyd Wang <gassnake999@gmail.com>
Co-authored-by: Daiki Tomioka <20753105+TomiXRM@users.noreply.github.com>
Co-authored-by: Henrik Øgård <henrik@ogard.no>
Co-authored-by: Henrik Øgård <henrikogaard@users.noreply.github.com>
Co-authored-by: Endless <endless@longbridge.com>
Co-authored-by: John Costa <costajohnt@gmail.com>
Co-authored-by: Alexander <87220898+sneffets@users.noreply.github.com>
Co-authored-by: Cesar Talén <154442565+cesartalen@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant